package com.xm;

import java.util.ArrayList;

/**
 * Author：xm
 * Project：interview
 * Date：2024/11/27  10:32
 */
public class ForLoop {
    public static void main(String[] args) {

        // （1）正序九九乘法表
        System.out.println("正序九九乘法表");
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "*" + i + "=" + i * j + "\t");
            }
            System.out.println();
        }

        // （2）逆序乘法表
        System.out.println("逆序乘法表");
        for (int i = 9; i >= 1; i--) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "*" + i + "=" + i * j + "\t");
            }
            System.out.println();
        }

        // （3）1-100之和
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        System.out.println("1-100之和：" + sum);

        // （4）1-100偶数之和
        int sum2 = 0;
        for (int i = 1; i <= 100; i++) {
            if (i % 2 == 0) {
                sum2 += i;
            }
        }
        System.out.println("1-100偶数之和：" + sum2);

        // （5）1-100奇数之和
        int sum3 = 0;
        for (int i = 1; i <= 100; i++) {
            if (i % 2 != 0) {
                sum3 += i;
            }
        }
        System.out.println("1-100奇数之和：" + sum3);

        // （6）列出1-10以内所有的奇数偶数
        ArrayList<Integer> oddArray = new ArrayList<>();
        ArrayList<Integer> evenArray = new ArrayList<>();
        for (int i = 1; i <= 10; i++) {
            if (i % 2 != 0) {
                oddArray.add(i);
            }
            if (i % 2 == 0) {
                evenArray.add(i);
            }
        }
        System.out.print("1-10以内所有的奇数：");
        for (int x : oddArray) {
            System.out.print(x + " ");
        }
        System.out.println();
        System.out.print("1-10以内所有的偶数：");
        for (int y : evenArray) {
            System.out.print(y + " ");
        }

        // （7）10以内所有的质数(素数)。大于1的自然数，除了1和它本身以外，不能被其他自然数整除的数叫做质数。
        System.out.println();
        System.out.print("1-10以内所有的质数(素数)：");
        int i;
        for (int num = 1; num <= 10; num++) {
            for (i = 2; i <= num - 1; i++) {
                if ((num % i) == 0) {
                    break;
                }
            }
            if (i == num) {
                System.out.print(num + " ");
            }
        }

        // （8）1-100以内的所有回文数
        System.out.println();
        System.out.print("1-100以内的回文数：");
        // 直接比较法。原数字和反转后的结果进行比较
        // 除法结果a，当a=0时结束。余数结果b；反转结果c=b+c*10
        for (int x = 1; x <= 100; x++) {
            int a = x;
            int c = 0;
            while (a != 0) {
                int b = a % 10;
                c = b + c * 10;
                a /= 10;
            }
            if (c == x) {
                System.out.print(x + " ");
            }
        }

        // （9）三位数的水仙花数，既100-999范围内的水仙花数
        System.out.println();
        System.out.print("100-999以内的水仙花数：");
        int bai = 0, shi = 0, ge = 0;
        int count = 0;
        for (int x = 100; x < 1000; x++) {
            bai = x / 100;
            shi = x % 100 / 10;
            ge = x % 10;
            if (x == bai * bai * bai + shi * shi * shi + ge * ge * ge) {
                System.out.print(x + " ");
                count++;
            }
        }
        System.out.println("共有" + count + "个水仙花数");

        // （10.1）鸡兔同笼：共有100个脚 各多少只？列出所有可能（24种）
        int num = 0;
        for (int x = 1; x < 50; x++) {
            for (int y = 1; y < 25; y++) {
                if (x * 2 + y * 4 == 100) {
                    // System.out.println(x + "鸡" + y + "兔");
                    num++;
                }
            }
        }
        System.out.println("鸡兔同笼：共有100个脚，各多少只？共有" + num + "种可能性");
        // （10.2）鸡兔同笼：鸡兔共35只,共94只脚,那么鸡和兔各几只?
        for (int j = 0, t = 35; j <= 35; j++, t--) {
            if (j * 2 + t * 4 == 94) {
                System.out.println("鸡兔同笼：鸡兔共35只，共94只脚，那么鸡和兔各几只？" + "鸡：" + j + "，兔：" + t);
            }
        }
    }
}
